package handler

import (
	"fmt"
	"go-react-microservice/controller"
	"go-react-microservice/models"
	"go-react-microservice/paramter"
	"net/http"
	"strconv"

	"github.com/gin-gonic/gin"
)

/*
* go 语言中首字母大写，表示公开方法
 */

//@tags 菜单管理
//@summary 获取菜单列表  -- 简单介绍
//@description 获取菜单列表 -- 描述
//@accept json
//@produce json
//@success 200 {object} map[string]interface{} "ok"
//@router /menu/list [get]
func GetMenuList(ctx *gin.Context) {
	list := controller.MenuController.GetMenuList()
	ctx.JSON(http.StatusOK, gin.H{
		"code": 10000,
		"msg":  "",
		"data": list,
	})
}

//@tags 菜单管理
//@summary 根据菜单id 获取菜单详细信息
//@accept json
//@produce json
//@param id path int true "菜单id" default(1)
//@success 200 {object} models.JSONResult{data=models.Menu} "ok"
//@router /menu/info/{id} [get]
func GetMenuInfoByID(ctx *gin.Context) {
	id, err := strconv.Atoi(ctx.Param("id"))
	if err != nil {
		ctx.JSON(http.StatusOK, gin.H{
			"code": 10001,
			"msg":  "参数错误",
		})
		return
	}
	info := controller.MenuController.GetInfo(id)
	ctx.JSON(http.StatusOK, gin.H{
		"code": 10000,
		"data": info,
	})
}

//@tags 菜单管理
//@summary 创建菜单
//@accept json
//@produce json
//@param param body paramter.MenuParam false "参数"
//@success 200 {object} models.JSONResult "ok"
//@router /menu/create [post]
func CreateMenu(ctx *gin.Context) {
	var param paramter.MenuParam
	//要保存对param 的修改，因此这里使用指针类型
	error := ctx.BindJSON(&param)
	if error != nil {
		ctx.JSON(http.StatusOK, gin.H{
			"code": 10001,
			"msg":  "参数错误",
		})
		return
	}
	fmt.Println("param=", param)
	menu := models.Menu{
		Name:     param.Name,
		Code:     param.Code,
		URL:      param.URL,
		Type:     param.Type,
		Order:    param.Order,
		ParentID: param.ParentID,
		Icon:     param.Icon,
	}
	// 创建目录，返回受影响的行数和错误
	rows, error := controller.MenuController.CreateMenu(&menu)
	if error != nil {
		ctx.JSON(http.StatusOK, gin.H{
			"code": 10001,
			"msg":  error.Error(),
		})
		return
	}
	if rows > 0 {
		ctx.JSON(http.StatusOK, gin.H{
			"code": 10000,
			"msg":  "创建成功",
		})
		return
	}
}
